Skip to main content

문자열 내 p와 y의 개수

문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다.

s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요.

'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다.

단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

제한 조건

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

입출력 예

sanswer
"pPoooyY"true
"Pyy"false
입출력 예 설명

입출력 예 #1

'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.

입출력 예 #2

'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.

풀이

첫 번째 풀이
def solution(s):
count = 0
for ch in s.lower():
if ch == 'p':
count += 1
elif ch == 'y':
count -= 1
return count == 0

일단 대소문자를 구분하지 않고 개수를 세야 하므로 문자를 모두 upper()로 대문자로 변환하거나, lower()로 소문자로 변환해 줍니다. 하지만 변환하지 않고도 or 연산자로 if 'p' or 'P': 이런 식으로 세는 방식도 가능하지만, 소문자로 변환해주면 소문자만 세면 되기 때문에 생각하기 쉬워집니다. 그다음에 반복문을 돌면서 하나씩 py의 개수를 세줍니다.

지금은 체크할 알파벳이 py 두 개밖에 없으므로 카운트하는 변수는 하나만 있어도 충분합니다. p인 경우엔 카운트 변수에 1을 증가시키고, y인 경우엔 카운트 변수에 1을 감소시킵니다. 개수를 모두 체크한 후 카운트 변수가 0이라면 개수가 같고, 0이 아니라면 같지 않습니다.

입출력 예 #1을 가지고 예를 들어보겠습니다.

pPoooyY를 모두 소문자로 변경하면 ppoooyy가 됩니다. 그 후에 py의 개수를 체크하면 p는 2개, y는 2개가 되므로 카운트 변수는 0이 되고 true를 반환합니다.

이번엔 입출력 예 #2를 가지고 해보겠습니다.

Pyypyy가 됩니다. 그리고 p는 1개 y는 2개가 되므로 카운트 변수는 -1이 되고 false를 반환합니다.

p가 많은 경우엔 0보다 커지게 되고, y가 많은 경우엔 0보다 작아지게 됩니다. 그리고 같은 경우엔 0이 되므로 카운트 변수가 하나라도 충분히 개수가 같은지 비교할 수 있습니다.


두 번째 풀이
def solution(s):
s = s.lower()
return s.count('p') == s.count('y')

두 번째 풀이 방법은 파이썬 내장함수인 count()를 사용해서 py의 개수가 같은지 비교해주기만 하면 구현이 끝납니다.